#define MAXSIZE 5

typedef struct
{
    int data[MAXSIZE]; // 注意：数组只存储 MAXSIZE - 1 个元素
    int front;         // 队头
    int rear;          // 队尾
} Queue;

// 初始化队列
void InitQueue(Queue &q)
{
    q.front = q.rear = 0;
}

// 判断队列是否为空
bool EmptyQueue(Queue q)
{
    return q.front == q.rear;
}

// 入队操作
bool PushQueue(Queue &q, int val)
{
    // 判断队列是否满了
    if ((q.rear + 1) % MAXSIZE == q.front)
    {
        return false;
    }
    // 入队列
    q.data[q.rear] = val;
    q.rear = (q.rear + 1) % MAXSIZE;
    return true;
}

// 出队操作
bool PopQueue(Queue &q, int &qtopval)
{
    // 判断队列是否为空
    if (q.front == q.rear)
    {
        return false;
    }
    // 记录队头元素
    qtopval = q.data[q.front];
    // 出队
    q.front = (q.front + 1) % MAXSIZE;

    return true;
}

// 判断队列是否为满
bool FullQueue(Queue q)
{
    return (q.rear + 1) % MAXSIZE == q.front;
}
